package String;

public class StringDemo {

    public static void main(String[] args) {
/*
使用字面量（""）来创建字符串对象是，JVM会检查常量池中是否有该对象
1）若无 则会创建字符串对象 并将其引用存入到常量池中
2）有 则直接将常量池中的对象返回 并不会创建新的字符串
// */
//        String s1="123abc";//常量池还没有 因此创建该字符串对象 并存入常量池
//        String s2="123abc";//有了 直接复用
//        String s3="123abc";
//        //引用类型== 比较的是地址是否相同
//        System.out.println(s1==s2);
//        System.out.println(s1==s3);
//        System.out.println(s2==s3);
//        s1=s1+"!";//创建新的字符串对象（"123abc！"）并将地址赋值给s1
//        System.out.println(s1==s2);//false
//        //
        String s1="123abc";//堆中创建123abc字符量对象
        //编译器编译时 若发现点两个字面量相连 会直接连接好并将结果保存
        String s2="123"+"abc";
        System.out.println(s1==s2);//true

        String s3="123";
        //因为s3是变量 编译并不会直接编译
        String s4=s3+"abc";
        System.out.println(s1==s4);//false

        String s=new String("hello");//创建了2个对象
        String s6="hello";//复用常量池中的字面量对象地址
        System.out.println(s==s6);//false 比较的是地址是否相同

        //在实际应用中 String比较相等一般是比较字符串的内容是否相等\
        //因此使用equals（）方法来比较两个字符串内容是否相同
        System.out.println(s.equals(s6));//true  equals（）比较的是内容是否相同
    }
}
